package com.Dec_Fifteen;

/**
 * 517. 超级洗衣机
 * 假设有 n 台超级洗衣机放在同一排上。开始的时候，每台洗衣机内可能有一定量的衣服，也可能是空的。
 *
 * 在每一步操作中，你可以选择任意 m (1 <= m <= n) 台洗衣机，与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。
 *
 * 给定一个整数数组 machines 代表从左至右每台洗衣机中的衣物数量，请给出能让所有洗衣机中剩下的衣物的数量相等的 最少的操作步数 。如果不能使每台洗衣机中衣物的数量相等，则返回 -1 。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/super-washing-machines
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * 2022/11/16 15:56
 */

public class Solution517 {

    public int findMinMoves(int[] machines) {
        int len=machines.length;
        int sum=0;
        for (int machine:machines){
            sum+=machine;
        }
        if (sum%len!=0) return -1;
        int avg=sum/len;
        int totalDiff=0; //整体的净流量偏差
        int curMax=0;
        int ans=0;
        for (int machine:machines){
            int curDiff=machine-avg;
            totalDiff+=curDiff;
            if (curDiff>=0){ //传递衣物
                curMax=Math.max(curDiff,Math.abs(totalDiff));
            }else { //接收衣物
                curMax=Math.max((Math.abs(curDiff)+1)/2,Math.abs(totalDiff));
            }
            ans=Math.max(ans,curMax);
        }
        return ans;
    }

    public static void main(String[] args) {
        Solution517 solution517=new Solution517();
        System.out.println(solution517.findMinMoves(new int[]{1,0,5}));
    }

}
